﻿
Public Class Gestor

#Region "Roberto"

    ''' <summary>
    ''' Registra una cuenta contable.
    ''' </summary>
    ''' <param name="p_codigoCuenta">Codigo de la cuenta contable.</param>
    ''' <param name="p_descripcion">Descripción de la cuenta contable.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 15/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Sub registrarCuenta(ByVal p_codigoCuenta As String, ByVal p_descripcion As String)
        MultiCuentaContable.agregar(p_codigoCuenta, p_descripcion)
    End Sub

    ''' <summary>
    ''' Consulta las cuentas contables por aproximacion de codigo.
    ''' </summary>
    ''' <param name="p_codigo">Codigo o aproximacion de codigo con el que se evalua la busqueda.</param>
    ''' <returns>Lista que contiene los datos de todas las cuentas resultantes de la busqueda.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 15/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Function consultarCuenta(ByVal p_codigo As String) As List(Of Hashtable)

        Dim listaCuentas As List(Of CuentaContable)

        listaCuentas = MultiCuentaContable.consultar(p_codigo)

        Dim listaDatos As New List(Of Hashtable)
        Dim datosCuenta As Hashtable

        For Each cuenta As CuentaContable In listaCuentas
            datosCuenta = cuenta.toHashTable(cuenta)
            listaDatos.Add(datosCuenta)
        Next

        Return listaDatos

    End Function

    ''' <summary>
    ''' Modifica una cuenta contable especifica.
    ''' </summary>
    ''' <param name="p_codigoCuenta">Codigo de cuenta contable a modificar.</param>
    ''' <param name="p_descripcion">Descripcion de la cuenta a modificar.</param>
    ''' <param name="p_saldo">Saldo de la cuenta a modificar. </param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 15/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Sub modificarCuenta(ByVal p_codigoCuenta As String, ByVal p_descripcion As String, ByVal p_saldo As Double)
        MultiCuentaContable.modificar(p_codigoCuenta, p_descripcion, p_saldo)
    End Sub
    ''' <summary>
    ''' Elimina una cuenta contable especifica
    ''' </summary>
    ''' <param name="p_codigoCuenta">Codigo de la cuenta contable a eliminar.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 15/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Sub eliminarCuenta(ByVal p_codigoCuenta As String)
        MultiCuentaContable.eliminar(p_codigoCuenta)
    End Sub
    ''' <summary>
    ''' Agrega una meta a un empleado especifico.
    ''' </summary>
    ''' <param name="p_codigoEmpleado">Codigo del empleado al cual se le agregara la meta.</param>
    ''' <param name="p_descripcion">Descripcion de la meta.</param>
    ''' <param name="p_fechaInicio">Fecha de inicio de la meta.</param>
    ''' <param name="p_fechaEsperada">Fecha Esperada para la finalizacion de la meta.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 19/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Sub agregarMeta(ByVal p_codigoEmpleado As String, ByVal p_descripcion As String, ByVal p_fechaInicio As Date, ByVal p_fechaEsperada As Date)
        MultiMeta.agregar(p_codigoEmpleado, p_descripcion, p_fechaInicio, p_fechaEsperada)
    End Sub

    ''' <summary>
    ''' Consulta todas las metas de un empleado en especifico.
    ''' </summary>
    ''' <param name="p_codigoEmpleado">Codigo del empleado del cual se buscaran las metas.</param>
    ''' <returns>Lista de datos de las metas del empleado.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 19/06/2010, Modificado: 19/06/2010</remarks>
    Public Shared Function consultarMetas(ByVal p_codigoEmpleado As String) As List(Of Hashtable)
        Dim listaMetas As List(Of Meta)

        listaMetas = MultiMeta.consultarPorEmpleado(p_codigoEmpleado)

        Dim listaDatos As New List(Of Hashtable)
        Dim datosMeta As Hashtable

        For Each meta As Meta In listaMetas
            datosMeta = meta.toHashTable(meta)
            listaDatos.Add(datosMeta)
        Next

        Return listaDatos
    End Function

    ''' <summary>
    ''' Modifica una meta especifica.
    ''' </summary>
    ''' <param name="p_codigo">Codigo de la meta a modificar.</param>
    ''' <param name="p_descripcion">Descripcion de la meta.</param>
    ''' <param name="p_fechaInicio">Fecha de inicio de la meta.</param>
    ''' <param name="p_fechaEsperada">Fecha esperada para la finalizacion de la meta.</param>
    ''' <param name="p_fechaReal">Fecha real en la que se concluyo la meta.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 19/06/2010, Modificado: 21/06/2010</remarks>
    Public Shared Sub modificarMeta(ByVal p_codigo As Integer, ByVal p_descripcion As String, ByVal p_fechaInicio As Date, ByVal p_fechaEsperada As Date, ByVal p_fechaReal As Date)
        MultiMeta.modificar(p_codigo, p_descripcion, p_fechaInicio, p_fechaEsperada, p_fechaReal)
    End Sub

    ''' <summary>
    ''' Eliminar una meta especifica.
    ''' </summary>
    ''' <param name="p_codigo">Codigo de la meta a eliminar.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 19/06/2010</remarks>
    Public Shared Sub eliminarMeta(ByVal p_codigo As Integer)
        MultiMeta.eliminar(p_codigo)
    End Sub

    ''' <summary>
    ''' Consulta los puestos
    ''' </summary>
    ''' <param name="p_codigoDepartamento">Codigo del Departamento.</param>
    ''' <returns>Lista con los datos de los puestos del departamento.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 27/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Function listarPuestosPorDepartamento(ByVal p_codigoDepartamento As Integer) As List(Of Hashtable)
        Dim listaNiveles As List(Of Nivel)
        Dim listaPuestosDeNivel As List(Of Puesto)
        Dim listaDatos As New List(Of Hashtable)

        listaNiveles = consultarNivelesPorDepartamento(p_codigoDepartamento)

        For Each nivel As Nivel In listaNiveles
            listaPuestosDeNivel = MultiPuesto.consultarPuestosPorNivel(nivel.codigo())

            For Each puesto As Puesto In listaPuestosDeNivel
                listaDatos.Add(puestoToHash(puesto))
            Next
        Next

        Return listaDatos
    End Function

    ''' <summary>
    ''' Consultar los niveles de una departamento
    ''' </summary>
    ''' <param name="p_codigoDepartamento">Codigo del departamento.</param>
    ''' <returns>Lista con los niveles de un departamento.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 27/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Function consultarNivelesPorDepartamento(ByVal p_codigoDepartamento As Integer) As List(Of Nivel)
        Dim listaNiveles As New List(Of Nivel)
        listaNiveles = MultiNivel.listarPorDepartamento(p_codigoDepartamento)
        Return listaNiveles
    End Function
    ''' <summary>
    ''' Retornar los datos de codigo y nombre de puesto.
    ''' </summary>
    ''' <param name="puesto">Puesto.</param>
    ''' <returns>Hashtable con los datos del puesto.</returns>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 27/06/2010, Modificado: 27/06/2010</remarks>
    Private Shared Function puestoToHash(ByVal puesto As Puesto) As Hashtable
        Dim datosPuesto As New Hashtable

        datosPuesto.Add("codigo", puesto.codigo())
        datosPuesto.Add("nombre", puesto.nombre())

        Return datosPuesto
    End Function
    ''' <summary>
    ''' Modificar el puesto de un empleado.
    ''' </summary>
    ''' <param name="p_codigoEmpleado">Codigo Empleado.</param>
    ''' <param name="p_codigoPuesto">Codigo Puesto.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 27/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Sub modificarPuestoAEmpleado(ByVal p_codigoEmpleado As String, ByVal p_codigoPuesto As Integer)
        MultiUsuario.modificarPuestoEmpleado(p_codigoEmpleado, p_codigoPuesto)
    End Sub

    ''' <summary>
    ''' Actualiza el historial de puestos de un empleado.
    ''' </summary>
    ''' <param name="p_codigoEmpleado">Codigo del empleado.</param>
    ''' <param name="p_codigoPuesto">Codigo del puesto.</param>
    ''' <remarks>Creado Por: Roberto Fiatt, Fecha: 20/07/2010, Modificado: 20/07/2010</remarks>
    Public Shared Sub actualizarHistorialEmpleado(ByVal p_codigoEmpleado As String, ByVal p_codigoPuesto As Integer)
        MultiUsuario.actualizarHistorial(p_codigoEmpleado, p_codigoPuesto)
    End Sub

#End Region


#Region "Elías Baldioceda"

    ''' <summary>
    ''' Busca un usuario.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <returns>Datos de un usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function usuarioBuscar(ByVal p_identificacion As String) As Hashtable
        Dim usuario As Usuario

        usuario = MultiUsuario.buscar(p_identificacion)

        If usuario Is Nothing Then
            Throw New Exception("El usuario no existe.")
        End If

        Return usuario.toHashtable
    End Function


    ''' <summary>
    ''' Obtiene los datos del usuario actual.
    ''' </summary>
    ''' <returns>Datos del usuario.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 20/06/2010, Modificado: 20/06/2010</remarks>
    Public Shared Function usuarioActual() As Hashtable
        g_usuario = MultiUsuario.buscar("114320719")

        Return g_usuario.toHashtable
    End Function


    ''' <summary>
    ''' Verifica si el usuario tiene el permiso indicado.
    ''' </summary>
    ''' <param name="p_identificacion">Número de identificación.</param>
    ''' <param name="p_permiso">Código del permiso.</param>
    ''' <returns>Si el usuario tiene el permiso.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 27/04/2010, Modificado: 27/04/2010</remarks>
    Public Shared Function usuarioTienePermiso(ByVal p_identificacion As String, ByVal p_permiso As Integer) As Boolean
        Dim tiene As Boolean = False

        If p_identificacion <> Nothing Then
            tiene = MultiUsuario.tienePermiso(p_identificacion, p_permiso)
        End If

        Return tiene
    End Function

    ''' <summary>
    ''' Obtiene todos los departamentos.
    ''' </summary>
    ''' <returns>Datos de todos los departamentos.</returns>
    ''' <remarks>Creado por: Elías Baldioceda, Fecha: 27/06/2010, Modificado: 27/06/2010</remarks>
    Public Shared Function departamentosTodos() As List(Of Hashtable)
        Dim departamentos As New List(Of Hashtable)

        For Each departamento As Departamento In MultiDepartamento.buscar("", "")
            departamentos.Add(departamento.toHashtable)
        Next

        Return departamentos
    End Function

#End Region



End Class
